package KnowSparkSQL.DSL.DatasetMethods;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

public class DatasetWhereMethods {
    public static void main(String[] args) {
        /**
         * where方法的主要作用是过滤出符合条件的行。
         * 参数是字符串类型的条件表达式，
         * 格式是：“列名 运算符 值”（如果值是字符串，用单引号括起来），
         * 它的返回值是Dataset<Row>类型
         * and操作符的优先级要高于or的优先级，也就是and先被执行
         * 小括号的优先级要高于and
         * 小括号>and>or
         */
        SparkSession session = SparkSession.builder().appName("DatasetWhereMethods").master("local").getOrCreate();

        Dataset<Row> student = session.read().json("./data/student.json");


        Dataset<Row> where = student.where("sex='男'");
        where.show();
        System.out.println("筛选出所有男同学");


        student.where("age > 21").show();
        System.out.println("筛选出年龄大于21岁的学生");


        student.where("institute = '机械学院' and (age <= '19' or sex = '女')").show();
        System.out.println("找出机械学院中年龄小于等于19岁或者性别是女的学生  小括号>and>or");


        student.where("name like 'A%'").show();
        System.out.println("用like模糊匹配出名字是A开头的所有学生");



        student.where("name rlike '^A'").show();
        System.out.println("用rlike正则匹配出名字是A开头的所有学生");


    }
}
